home *** CD-ROM | disk | FTP | other *** search
- head 1.8;
- branch ;
- access ;
- symbols ;
- locks ;
- comment @@;
-
-
- 1.8
- date 92.03.01.10.27.03; author melling; state Exp;
- branches ;
- next 1.7;
-
- 1.7
- date 92.03.01.05.07.46; author melling; state Exp;
- branches ;
- next 1.6;
-
- 1.6
- date 92.02.29.20.35.50; author melling; state Exp;
- branches ;
- next 1.5;
-
- 1.5
- date 92.02.28.05.19.04; author melling; state Exp;
- branches ;
- next 1.4;
-
- 1.4
- date 91.12.19.10.12.46; author melling; state Exp;
- branches ;
- next 1.3;
-
- 1.3
- date 91.12.16.17.22.14; author melling; state Exp;
- branches ;
- next 1.2;
-
- 1.2
- date 91.12.07.07.49.14; author melling; state Exp;
- branches ;
- next 1.1;
-
- 1.1
- date 91.12.07.03.37.04; author melling; state Exp;
- branches ;
- next ;
-
-
- desc
- @Tetris 1.1
- @
-
-
- 1.8
- log
- @Release 1.3
- @
- text
- @
- #import <appkit/Button.h>
- #import <appkit/ButtonCell.h>
- #import <appkit/Panel.h>
- #import <appkit/Window.h>
- #import <appkit/TextField.h>
- #import <appkit/graphics.h>
- #import <string.h>
- #import <ctype.h>
-
- #import "TetApp.h"
- #import "NextMatrix.h"
- #import "ScoreKeeper.h"
- #import "TetMatrix.h"
-
- @@implementation TetApp
-
- - initForColor
- {
- const NXScreen *deepestScreen;
- const char *str;
-
-
- str = NXGetDefaultValue([NXApp appName], "ColorOff");
- if (str != NULL && (strcmp(str, "YES") == 0)) {
- colorOff = YES;
- gameInColor = NO;
- #ifdef DEBUG
- fprintf(stderr, "Game wants to be B&W\n");
- #endif
- } else {
- colorOff = NO;
- deepestScreen = [NXApp colorScreen];
-
- if ( deepestScreen->depth != NX_TwoBitGrayDepth ) {
- // Then 12 bit color should be more than enough
- [tetrisWindow setDepthLimit:NX_TwelveBitRGBDepth];
- gameInColor = YES;
- } else {
- gameInColor = NO;
- }
- }
- return self;
- }
-
-
- + new
- {
- self = [super new];
- [self setDelegate:self];
- [self initForColor];
- started = paused = NO;
- numRandomRows = 4;
- return self;
- }
-
-
- - setLevelLeft:anObject
- {
- levelLeft = anObject;
- [[levelLeft cell] setHighlightsBy:NX_CONTENTS | NX_CHANGEGRAY];
- [levelLeft sendActionOn:NX_MOUSEDOWNMASK];
- return self;
- }
-
- - setLevelRight:anObject
- {
- levelRight = anObject;
- [[levelRight cell] setHighlightsBy:NX_CONTENTS | NX_CHANGEGRAY];
- [levelRight sendActionOn:NX_MOUSEDOWNMASK];
- return self;
- }
-
- - (BOOL) isGameColor
- {
- return gameInColor;
- }
-
- - setTetrisWindow:anObject
- {
- tetrisWindow = anObject;
- [tetrisWindow setDelegate:self];
- [tetrisWindow setMiniwindowIcon:"Tetris"];
- return self;
- }
-
-
- - appDidInit:sender
- {
- const char *str;
- int levelValue;
-
- [controlWindow removeFromEventMask:NX_KEYDOWNMASK|NX_KEYUPMASK];
- [controlWindow orderFront:self];
-
- str = NXGetDefaultValue([NXApp appName], "CurrentLevel");
- if (str != NULL) {
- sscanf(str, "%d", &levelValue);
- [level setIntValue: levelValue];
- [self updateLeft: levelValue];
- [self updateRight: levelValue];
- #ifdef DEBUG
- fprintf(stderr, "Setting current level to %d\n", levelValue);
- #endif
- }
-
- str = NXGetDefaultValue([NXApp appName], "RandomRows");
- if (str != NULL) {
- sscanf(str, "%d", &numRandomRows);
- [randomField setIntValue:numRandomRows];
- [randomSlider setIntValue:numRandomRows];
- #ifdef DEBUG
- fprintf(stderr, "Setting number Random rows to %d\n", numRandomRows);
- #endif
- }
- str = NXGetDefaultValue([NXApp appName], "ShowNext");
- if (str != NULL) {
- if (strcmp(str, "YES") == 0) {
- [showNextSwitch setIntValue: YES];
- [showNext showNext:showNextSwitch]; // ID is actually ignored
- }
- }
- [colorSwitch setIntValue: colorOff];
-
- [tetrisWindow orderWindow:NX_ABOVE relativeTo:0];
- [tetrisWindow makeKeyWindow];
-
- return self;
- }
-
- - (BOOL) gamePaused
- {
- return paused;
- }
-
- - keyDown:(NXEvent *)theEvent
- {
- unsigned short charCode;
- printf("Keydown in TetApp\n");
-
- charCode = theEvent->data.key.charCode;
- if (isupper(charCode))
- charCode = tolower(charCode);
-
- switch (charCode) {
- case 13: // Pause if the user hits return
- [self pause:self];
- }
- return self;
- }
-
- - resignActiveApp
- {
- if (started && !paused)
- [self pause:self];
- return [super resignActiveApp];
- }
-
- - updateLeft:(int) theLevel
- {
- if (theLevel <= MIN_LEVEL) {
- [[levelLeft setEnabled:NO] setIcon:"scrollMenuLeftD"];
- } else {
- [[levelLeft setEnabled:YES] setIcon:"scrollMenuLeft"];
- }
- return self;
- }
-
- - updateRight:(int) theLevel
- {
- if (theLevel >= MAX_LEVEL) {
- [[levelRight setEnabled:NO] setIcon:"scrollMenuRightD"];
- } else {
- [[levelRight setEnabled:YES] setIcon:"scrollMenuRight"];
- }
- return self;
- }
-
- - start:sender
- {
- int levelValue = [level intValue];
-
- if (started) {
- if (paused)
- [self pause:sender];
- [tetrisView stop:sender];
- [[tetrisView window] disableFlushWindow];
- [showNext end:self];
- [startButton setTitle:"New game"];
- [pauseButton setEnabled:NO];
- [levelLeft setTransparent:NO];
- [levelRight setTransparent:NO];
- [self updateLeft: levelValue];
- [self updateRight: levelValue];
- [[[tetrisView window] reenableFlushWindow] flushWindow];
- started = NO;
- } else {
- [[tetrisView window] disableFlushWindow];
- [showNext start:self];
- [startButton setTitle:"Abort"];
- [pauseButton setEnabled:YES];
- [scoreKeeper setZero];
- [tetrisView setScoreKeeper:scoreKeeper];
- [[levelLeft setTransparent:YES] setEnabled:NO];
- [[levelRight setTransparent:YES] setEnabled:NO];
- [[[tetrisView window] reenableFlushWindow] flushWindow];
- [tetrisView newGame:levelValue];
- started = YES;
- }
- return self;
- }
-
- - pause:sender
- {
- [[tetrisView window] disableFlushWindow];
- if (paused) {
- [pauseButton setTitle:"Pause"];
- [pauseDisplay setStringValueNoCopy:""];
- [tetrisView continue:sender];
- paused = NO;
- } else {
- [tetrisView pause:sender];
- [pauseButton setTitle:"Continue"];
- [pauseDisplay setStringValueNoCopy:"PAUSED"];
- paused = YES;
- }
- [[[tetrisView window] reenableFlushWindow] flushWindow];
- return self;
- }
-
- - gameOver
- {
- int levelValue = [level intValue];
-
- [[tetrisView window] disableFlushWindow];
- [showNext end:self];
- [startButton setTitle:"New game"];
- [pauseButton setEnabled:NO];
- [levelLeft setTransparent:NO];
- [levelRight setTransparent:NO];
- [self updateLeft: levelValue];
- [self updateRight: levelValue];
- [[[tetrisView window] reenableFlushWindow] flushWindow];
- NXPing();
- started = NO;
-
- [scoreKeeper updateHighScores:levelValue];
- return self;
- }
-
- - levelLeft:sender
- {
- int levelValue = [level intValue];
-
- if (levelValue != MIN_LEVEL) {
- [level setIntValue:--levelValue];
- [self updateLeft: levelValue];
- [self updateRight: levelValue];
- }
- return self;
- }
-
- - levelRight:sender
- {
- int levelValue = [level intValue];
-
- if (levelValue != MAX_LEVEL) {
- [level setIntValue:++levelValue];
- [self updateLeft: levelValue];
- [self updateRight: levelValue];
- }
- return self;
- }
-
- /*
- * Set the number of rows where random pieces will appear.
- */
- - setRandomRows:sender
- {
- int tmp;
- tmp = [sender intValue];
-
- // Will always be valid since slider is the only object that can call me!?
- if (tmp >= 0 && tmp <=10) {
- numRandomRows = tmp;
- [randomField setIntValue: tmp];
- } else {
- [randomField setIntValue:numRandomRows];
- }
- return self;
- }
-
- /*
- * Let user use monochrome blocks to get better speed.
- */
- - adjustColor:sender
- {
- int value = [sender intValue];
- colorOff = value;
- if ( (colorOff == NO) && ([NXApp colorScreen] != NX_TwoBitGrayDepth)) {
- gameInColor = YES;
- }
- if (colorOff == YES) {
- [tetrisWindow setDepthLimit:NX_TwoBitGrayDepth];
- } else {
- [tetrisWindow setDepthLimit:NX_TwelveBitRGBDepth];
- }
- if (value == YES) {
- fprintf(stderr, "Turing color off\n");
- } else {
- fprintf(stderr, "Turing color on\n");
- }
- return self;
- }
-
- /*
- * User has clicked quit.
- * If the game is in progress then verify the quit.
- * Save high scores and default values.
- */
- - terminate:sender
- {
- char buf[20];
-
- if (started &&
- NXRunAlertPanel("Quit", "Game is still in progress. Really quit?",
- "Quit", "Cancel", NULL) == NX_ALERTALTERNATE)
- return self;
-
- // Clean up and die
- [scoreKeeper writeScores];
- sprintf(buf,"%d", [level intValue]);
- NXWriteDefault ([NXApp appName], "CurrentLevel", buf);
- NXWriteDefault ([NXApp appName], "ColorOff", ([colorSwitch intValue]) ? "YES" : "NO");
- sprintf(buf,"%d", numRandomRows);
- NXWriteDefault ([NXApp appName], "RandomRows", buf);
- NXWriteDefault ([NXApp appName], "ShowNext", ([showNextSwitch intValue]) ? "YES" : "NO");
- return [super terminate:sender];
- }
-
- /*
- * Allow the user to set the blocks images that make up the pieces
- */
- - setBlocks:sender
- {
- return self;
- }
-
- - windowWillMiniaturize:sender toMiniwindow:miniwindow
- {
- if (started && !paused)
- [self pause:sender];
- return self;
- }
-
- - windowDidMove:sender
- {
- NXRect aRect;
- float newX, newY;
-
- [[tetrisView window] getFrame:&aRect];
- newX = aRect.origin.x + aRect.size.width + 5.;
- newY = aRect.origin.y;
- [controlWindow moveTo: newX :newY];
-
- return self;
- }
-
- /*
- * Must bring the control panel to the front too.
- */
- - windowDidBecomeKey:sender
- {
- [controlWindow orderFront:self];
- return self;
- }
- @@end
- @
-
-
- 1.7
- log
- @*** empty log message ***
- @
- text
- @d9 1
- d18 29
- d51 1
- d53 1
- a53 1
-
- a80 3
- const NXScreen *deepestScreen;
- char *str;
-
- a83 15
-
- str= NXGetDefaultValue([NXApp appName], "ColorOff");
- if (str != NULL && strcmp(str, "YES")) {
- gameInColor = NO;
- } else { //
- deepestScreen=[NXApp colorScreen];
-
- if ( deepestScreen->depth != NX_TwoBitGrayDepth ) {
- // Then 12 bit color should be more than enough
- [tetrisWindow setDepthLimit:NX_TwelveBitRGBDepth];
- gameInColor = YES;
- } else {
- gameInColor = NO;
- }
- }
- d90 1
- a90 1
- char *levelStr;
- d95 4
- a98 4
- #ifdef 0
- levelStr = NXGetDefaultValue([NXApp appName], "CurrentLevel");
- if (levelStr != NULL) {
- sscanf(levelStr, "%d", levelValue);
- d102 3
- d106 8
- d115 11
- d131 21
- d275 21
- d299 10
- a308 2
-
- if (value = YES) {
- d315 6
- d332 1
- a332 2
- sprintf(buf,"%d", level);
-
- d334 4
- a337 2
- NXWriteDefault ([NXApp appName], "ColorOff", (gameInColor) ? "NO" : "YES");
-
- d366 9
- @
-
-
- 1.6
- log
- @*** empty log message ***
- @
- text
- @d5 1
- d8 2
- d23 1
- a23 2
- // tetrisView = [[TetMatrix alloc] initframe
- return self;
- d26 1
- d51 1
- d57 2
- a58 13
- deepestScreen=[NXApp colorScreen];
-
- if ( deepestScreen->depth != NX_TwoBitGrayDepth ) {
- // Then 12 bit color should be more than enough
- [tetrisWindow setDepthLimit:NX_TwelveBitRGBDepth];
- #ifdef DEBUG
- printf("Setting screen depth to 12 bits/pixel.\n");
- #endif
- gameInColor = YES;
- } else {
- #ifdef DEBUG
- printf("Setting screen depth to 2 bits/pixel.\n");
- #endif
- d60 10
- d77 2
- a78 1
- // NXRect aRect = {0.0, 0.0, 0.0, 0.0};
- d80 12
- a91 2
- // [controlBox moveTo: 400. :0.];
- [tetrisWindow makeKeyWindow];
- a92 3
- // Make the Window the proper size
- // [tetrisWindow sizeWindow: 342.+104. :837+15.];
-
- d105 5
- a109 4
- if (theLevel <= MIN_LEVEL)
- [[levelLeft setEnabled:NO] setIcon:"scrollMenuLeftD"];
- else
- [[levelLeft setEnabled:YES] setIcon:"scrollMenuLeft"];
- d115 6
- a120 5
- if (theLevel >= MAX_LEVEL)
- [[self->levelRight setEnabled:NO] setIcon:"scrollMenuRightD"];
- else
- [[self->levelRight setEnabled:YES] setIcon:"scrollMenuRight"];
- return self;
- d219 11
- d232 2
- d238 2
- d241 5
- d249 3
- a253 1
-
- d264 12
- @
-
-
- 1.5
- log
- @*** empty log message ***
- @
- text
- @d79 3
- @
-
-
- 1.4
- log
- @*** empty log message ***
- @
- text
- @d40 5
- d52 1
- d61 1
- a61 1
-
- d66 1
- d74 1
- a74 1
- NXRect aRect = {0.0, 0.0, 0.0, 0.0};
- d76 1
- a78 5
- // [[NXImage findImageNamed:"Block1"] getSize:&size];
- // resize(&size);
- // aRect.size.height = 25 * 16.0;
- // aRect.size.width = 10 * 16.0;
-
- d89 1
- a89 1
- - updateLeft:(int) level
- d91 1
- a91 1
- if (level <= MIN_LEVEL)
- d98 1
- a98 1
- - updateRight:(int) level
- d100 1
- a100 1
- if (level >= MAX_LEVEL)
- @
-
-
- 1.3
- log
- @*** empty log message ***
- @
- text
- @a10 1
- #import "Cheater.h"
- d16 5
- a20 6
- self = [super new];
- [self setDelegate:self];
- started = paused = NO;
- #ifdef DEBUG
- // aCheater = [[Cheater alloc] init];
- #endif
- a63 8
- /*
- * The Cheater Object will tell us its id.
- */
- - setCheater:anObject
- {
- aCheater = anObject;
- return self;
- }
- d65 1
- a65 4
- /*
- * Other objects can request the Cheaters id.
- */
- - getCheater
- d67 1
- a67 2
- return aCheater;
- }
- a68 2
- - appDidInit:sender
- {
- d70 6
- d210 6
- d218 2
- a219 2
- // if (started && !paused)
- // [self pause:sender];
- @
-
-
- 1.2
- log
- @Tetris 1.2
- @
- text
- @d11 1
- d20 3
- d44 20
- a63 5
- tetrisWindow = anObject;
- [tetrisWindow setDelegate:self];
- [tetrisWindow setMiniwindowIcon:"Tetris"];
- [tetrisWindow setDepthLimit:NX_TwelveBitRGBDepth];
- return self;
- d66 17
- d85 2
- a86 2
- [tetrisWindow makeKeyWindow];
- return self;
- @
-
-
- 1.1
- log
- @Initial revision
- @
- text
- @d6 1
- d43 1
- d60 1
- a60 1
- static void updateLeft(id self, int level)
- d62 5
- a66 4
- if (level <= MIN_LEVEL)
- [[self->levelLeft setEnabled:NO] setIcon:"scrollMenuLeftD"];
- else
- [[self->levelLeft setEnabled:YES] setIcon:"scrollMenuLeft"];
- d69 1
- a69 1
- static void updateRight(id self, int level)
- d75 1
- d92 2
- a93 2
- updateLeft(self, levelValue);
- updateRight(self, levelValue);
- d140 2
- a141 2
- updateLeft(self, levelValue);
- updateRight(self, levelValue);
- d156 2
- a157 2
- updateLeft(self, levelValue);
- updateRight(self, levelValue);
- d159 1
- d168 2
- a169 2
- updateLeft(self, levelValue);
- updateRight(self, levelValue);
- d171 1
- d186 2
- a187 2
- if (started && !paused)
- [self pause:sender];
- @
-